package cn.aixuxi.security.uaa.handler;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * 类描述 添加/修改数据时自动填充相关字段
 *
 * @author ruozhuliufeng
 * @version 1.0
 * @date 2021/5/22 11:25
 */
@Slf4j
@Component
public class UaaMetaObjectHandler implements MetaObjectHandler {
    /**
     * 插入元对象字段填充（用于插入时对公共字段的填充）
     *
     * @param metaObject 元对象
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        // 获取登录认证信息
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        // 获取登录用户名
        String username = authentication.getName();
        // 填充创建与修改时间
        this.fillStrategy(metaObject,"createTime",new Date());
        this.fillStrategy(metaObject,"updateTime",new Date());
        // 填充创建与修改用户
        this.setFieldValByName("createBy",username,metaObject);
        this.setFieldValByName("updateBy",username,metaObject);
        // 添加时默认为不删除
        this.setFieldValByName("isDelete",0,metaObject);
    }

    /**
     * 更新元对象字段填充（用于更新时对公共字段的填充）
     *
     * @param metaObject 元对象
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        // 获取登录认证信息
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        // 获取登录用户名
        String username = authentication.getName();
        this.fillStrategy(metaObject,"updateTime",new Date());
        this.setFieldValByName("updateBy",username,metaObject);

    }
}
